package com.frejoys.service;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.common.auth.AuthRuleAddDto;
import com.frejoys.common.dto.common.auth.AuthRuleUpDto;
import com.frejoys.common.vo.common.auth.AuthRuleMenuVo;
import com.frejoys.common.vo.common.auth.AuthRuleVo;
import com.frejoys.dao.entity.AuthRule;

import java.util.List;

public interface AuthRuleService extends IService<AuthRule> {

    default AuthRule getOnly(QueryWrapper<AuthRule> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default AuthRule getOnly(LambdaQueryWrapper<AuthRule> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 创建
     * @param dto
     * @return
     */
    boolean addInfo(AuthRuleAddDto dto);

    /**
     * 更新
     * @param dto
     * @return
     */
    boolean upInfo(AuthRuleUpDto dto);

    /**
     * 信息
     * @param id
     * @return
     */
    AuthRule getInfo(Integer id);

    /**
     * 根据路由获取权限id
     * @param route
     * @return
     */
    Integer getIdByRoute(String route);

    /**
     * 列表
     * @param userId
     * @return
     */
    List<AuthRuleVo> listInfo(Long userId);

    /**
     * 根据pid获取,路径排序
     * @param pid
     * @return
     */
    List<AuthRule> getListByPidOrder(Integer pid);

    /**
     * 根据pid获取,路径排序
     * @param pid
     * @return
     */
    List<AuthRule> getListByPidOrder(List<Integer> pid);

    /**
     * 获取菜单
     * @param userId
     * @return
     */
    List<AuthRuleMenuVo> listMenu(Long userId);

    /**
     * 检查是否有权限
     * @param userId
     * @param route
     * @return
     */
    boolean authCheck(Long userId, String route);

    //全部菜单 - 两级
    List<AuthRuleMenuVo> listAll();
}
